home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-11-20 | 31.4 KB | 920 lines |
- 10000 'SMENTRY2 - STOCK CHARTING AND DATA ENTRY PROGRAM - RELEASE 2.1
- 10330 SCREEN 0,0,0:COLOR 7,0:WIDTH 80:DEFINT A-Z:OPTION BASE 1
- 10340 KEY OFF:FOR J=1 TO 10:KEY J,"":NEXT J:GOSUB 25820
- 10360 B=0:C=0:Y=0:T=0:X=0:DIM P(200)
- 10380 DEF SEG=0:D=PEEK(&H410) AND &H30
- 10410 Z$=MKI$(0):C$=Z$:H$="SMENTRY2.HS1":W$=SPACE$(80)
- 10420 XD$=SPACE$(64):PD$=SPACE$(32)
- 10440 OPEN"SMSETUP2.CTL"AS #1 LEN=64:IF LOF(1)<=0 THEN 10490
- 10450 FIELD#1,64 AS B$:GET#1:IF LEFT$(B$,4)<>"SMC2" THEN 10490
- 10460 IF MID$(B$,11,1)<>"Y" THEN CLOSE#1:RUN"SMADDEL2"
- 10470 D$=B$:CLOSE#1:GOTO 10540
- 10490 CLOSE#1:KILL"SMSETUP2.CTL":RUN"SMADDEL2"
- 10540 DIM MT(12):FOR J=1 TO 12:READ MT(J):NEXT J
- 10550 DATA 31,28,31,30,31,30,31,31,30,31,30,31
- 10560 DC$=DATE$:DY=VAL(RIGHT$(DC$,4))-1920:DM=VAL(LEFT$(DC$,2))
- 10570 DD=VAL(MID$(DC$,4,2)):MT(2)=28+ABS(DY MOD 4 = 0):J=DM:DJ=DD
- 10580 IF J>1 THEN J=J-1:DJ=DJ+MT(J):GOTO 10580
- 10590 DW=(INT((DY-1)*365.25)+DJ+5) MOD 7:IF DW=0 THEN DW=7
- 10630 DIM BS(22):FOR J=1 TO 22:READ BS(J):NEXT J
- 10640 DATA &H8B55,&HB8EC,&H0600,&H07B7,&H768B,&H8A0C,&H8B2C
- 10650 DATA &H0A76,&H0C8A,&H768B,&H8A08,&H8B34,&H0676,&H148A
- 10660 DATA &HCDFE,&HC9FE,&HCEFE,&HCAFE,&H10CD,&HCA5D,&H0008,&H0000
- 10750 DIM SC(33):FOR J=1 TO 33:READ SC(J):NEXT J
- 10760 DATA &H8B55,&H50EC,&H5153,&H5652,&HB68B,&H0010,&H2C8A,&HB68B
- 10770 DATA &H000E,&H0C8A,&HB68B,&H000C,&H348A,&HB68B,&H000A,&H148A
- 10780 DATA &HB68B,&H0008,&H3C8A,&HB68B,&H0006,&H048A,&HCDFE,&HC9FE
- 10790 DATA &HCEFE,&HCAFE,&H06B4,&H10CD,&H5A5E,&H5B59,&H5D58,&H0CCA,&H0000
- 10840 TM=90:DIM TP!(90),SV!(90),HP!(90),LP!(90)
- 10850 DIM CP!(90),M1!(90),M2!(90),M3!(90)
- 10860 XM=111:DIM XR$(111):FOR J=1 TO XM:XR$(J)=XD$:NEXT J
- 10870 IF MID$(D$,12,1)<>"*" THEN 10910
- 10880 LOCATE 23,1:PRINT"Insert DATA disk and press ENTER or Esc when ready.";
- 10890 GOSUB 29250:IF ESC THEN 10990
- 10910 GOSUB 26640:IF ESC THEN 10990
- 10920 ON SGN(XC)+2 GOTO 10940,10950,10930
- 10930 LOCATE X1,1:GOSUB 25440:X2=X1+X5-X4:GOTO 11030
- 10940 LOCATE 23,1:PRINT"Index file not found on data disk.";:GOTO 10960
- 10950 LOCATE 23,1:PRINT"Index file has no data in it.";
- 10960 PRINT" Insert correct DATA disk and press ENTER,"
- 10970 PRINT"or press Esc to go back to add/delete stocks program.";
- 10980 GOSUB 29250:IF NOT ESC THEN 10910
- 10990 GOSUB 12930:GOTO 10990
- 11030 LOCATE 21,1
- 11040 PRINT"The ";CHR$(24);" ";CHR$(25);" Home End PgUp PgDn";
- 11050 PRINT" keys are used to select an individual stock. ";
- 11060 PRINT"E=data Entry or correction of vol- ";
- 11070 PRINT"G=bar Graph for selected stock Q=Quit";
- 11080 PRINT" ume and prices for selected stock ";
- 11090 PRINT"A=Add or delete any stock H=Help";
- 11100 PRINT"Press appropriate key for required function.";SPACE$(35);
- 11110 GOSUB 25980
- 11120 LOCATE 24,45,1:GOSUB 29650
- 11130 IF LEFT$(C$,1)=CHR$(0) THEN 11170
- 11140 F=INSTR(1,"281379AaEeGgHhQq",LEFT$(C$,1))
- 11150 IF F<=0 THEN GOSUB 29830:GOTO 11120
- 11160 IF F<=6 THEN 11190 ELSE 11210
- 11170 F=INSTR(1,"PHOQGI",RIGHT$(C$,1))
- 11180 IF F<=0 THEN GOSUB 29830:GOTO 11120
- 11190 GOSUB 25930:ON F GOSUB 24950,24850,25330,25140,25230,25040
- 11200 GOTO 11110
- 11210 F=(F-5)\2:GOSUB 25930:ON F GOTO 11230,11250,11310,11460,11490
- 11230 GOSUB 12830:GOTO 11030
- 11250 IF CVI(MID$(XD$,35,2))=0 THEN 11430
- 11260 GOSUB 27340:IF ESC THEN 11030
- 11270 GOSUB 24030:T6=0:GOSUB 23130:X=1:GOTO 11530
- 11310 DEF SEG=&HB800:J=PEEK(0)
- 11320 POKE 0,&H55:IF PEEK(0)<>&H55 THEN POKE 0,J:GOTO 11410
- 11330 POKE 0,&HAA:IF PEEK(0)<>&HAA THEN POKE 0,J:GOTO 11410
- 11340 POKE 0,J:IF CVI(MID$(XD$,35,2))=0 THEN 11430
- 11350 GOSUB 27340:IF ESC THEN 11030 ELSE J=TL
- 11360 IF CP!(J)>0 THEN 12030
- 11370 J=J-1:IF J<=0 THEN J=TC
- 11380 IF J<>TL THEN 11360
- 11390 LOCATE 25,1:COLOR 23,0:PRINT"No price history data was entered.";
- 11400 COLOR 7,0:OK=0:BEEP:GOTO 11030
- 11410 LOCATE 25,1:COLOR 23,0:PRINT"Graphics adapter not available.";
- 11420 COLOR 7,0:OK=0:BEEP:GOTO 11110
- 11430 LOCATE 25,1:COLOR 23,0:PRINT"Price history file not available.";
- 11440 COLOR 7,0:OK=0:BEEP:GOTO 11110
- 11460 MID$(H$,12)="1":GOSUB 13050:IF F>=0 THEN 11030
- 11470 GOSUB 25820:GOSUB 25440:GOTO 11030
- 11490 GOSUB 12530:GOTO 11030
- 11530 LOCATE 21,1
- 11540 PRINT"The ";CHR$(24);" ";CHR$(25);" ";CHR$(26);" ";CHR$(27);" Home ";
- 11550 PRINT"End PgUp PgDn keys are used to select the day, week or item.";
- 11560 PRINT"A=Add new day or week M=Moving average ";
- 11570 PRINT"period S=Select another stock Q=Quit";
- 11580 PRINT"E=Enter volume/prices D=stock Dividend(";
- 11590 PRINT"split) C=Change P=Print G=Graph H=Help";
- 11600 PRINT"Press appropriate key for required function.";SPACE$(35);
- 11610 J=T5:Y=T2:GOSUB 23580
- 11620 LOCATE 24,45,1:GOSUB 29650:IF LEFT$(C$,1)=CHR$(0) THEN 11660
- 11630 F=INSTR(1,"24681379AaCcDdEeMmPpHhQqSsGg",LEFT$(C$,1))
- 11640 IF F<=0 THEN GOSUB 29830:GOTO 11620
- 11650 IF F<=8 THEN 11680 ELSE F=(F-7)\2:IF F<=6 THEN 11710 ELSE 11730
- 11660 F=INSTR(1,"PKMHOQGI",RIGHT$(C$,1))
- 11670 IF F<=0 THEN GOSUB 29830:GOTO 11620
- 11680 J=T5:Y=T2:GOSUB 23530
- 11690 ON F GOSUB 22650,22340,22390,22450,23130,22940,23030,22840
- 11700 GOTO 11610
- 11710 ON F GOSUB 17560,19040,20040,18050,21030,17040
- 11720 GOTO 11530
- 11730 J=T5:Y=T2:GOSUB 23530
- 11740 ON F-6 GOTO 11760,11790,11810,11890
- 11760 MID$(H$,12)="2":GOSUB 13050:IF F>=0 THEN 11530
- 11770 GOSUB 24030:GOSUB 23250:GOTO 11530
- 11790 GOSUB 12530:GOTO 11530
- 11810 GOSUB 29730:IF UPD THEN GOSUB 27740
- 11820 GOSUB 25820:GOSUB 25440:GOTO 11030
- 11890 DEF SEG=&HB800:J=PEEK(0)
- 11900 POKE 0,&H55:IF PEEK(0)<>&H55 THEN POKE 0,J:GOTO 11980
- 11910 POKE 0,&HAA:IF PEEK(0)<>&HAA THEN POKE 0,J:GOTO 11980
- 11920 POKE 0,J:J=TL
- 11930 IF CP!(J)>0 THEN 12030
- 11940 J=J-1:IF J<=0 THEN J=TC
- 11950 IF J<>TL THEN 11930
- 11960 LOCATE 25,1:COLOR 23,0:PRINT"No price history data was entered.";
- 11970 COLOR 7,0:OK=0:BEEP:GOTO 11610
- 11980 LOCATE 25,1:COLOR 23,0:PRINT"Graphics adapter not available.";
- 11990 COLOR 7,0:OK=0:BEEP:GOTO 11610
- 12030 GOSUB 13550
- 12040 LOCATE 25,1:PRINT"data Entry Select Print Quit Help";
- 12050 GOSUB 29650:F=INSTR(1,"PpEeSsHhQq",LEFT$(C$,1))
- 12060 IF F<=0 THEN BEEP:GOTO 12050
- 12070 F=(F+1)\2:ON F GOTO 12090,12110,12130,12160,12180
- 12090 GOSUB 15030:GOTO 12040
- 12110 GOSUB 12480:GOSUB 24030:T6=0:GOSUB 23130:X=1:GOTO 11530
- 12130 GOSUB 12480:IF UPD THEN GOSUB 27740
- 12140 GOSUB 25820:GOSUB 25440:GOTO 11030
- 12160 GOSUB 12480:MID$(H$,12)="3":GOSUB 13050:GOTO 12030
- 12180 GOSUB 12480:GOSUB 12530:GOTO 12030
- 12480 DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR D
- 12490 SCREEN 0,0,0:WIDTH 80:LOCATE ,,0:RETURN
- 12530 GOSUB 29730:LOCATE 22,1
- 12540 PRINT"Do you want to quit the stock charting system and go to DOS";
- 12550 GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
- 12560 GOSUB 29730:IF UPD THEN GOSUB 27740
- 12570 R=0:GOSUB 26440:IF MID$(D$,12,1)<>"*" THEN 12610
- 12580 LOCATE 23,1:PRINT"Insert PROGRAM diskette and press ENTER.";
- 12590 GOSUB 29250:IF ESC THEN F=0:RETURN
- 12610 MID$(D$,11,1)="N":ON ERROR GOTO 12640
- 12620 OPEN"SMSETUP2.CTL" AS #1 LEN=64:ON ERROR GOTO 29930
- 12630 FIELD#1,64 AS B$:LSET B$=D$:PUT#1:CLOSE#1:GOTO 12660
- 12640 IF ERR=71 THEN RESUME 12650 ELSE 29930
- 12650 GOSUB 29040:IF ESC THEN F=0:RETURN ELSE 12610
- 12660 IF MID$(D$,12,1)<>"*" THEN 12690
- 12670 LOCATE 23,1:PRINT"Insert diskette with DOS on it and press ENTER.";
- 12680 GOSUB 29250:IF ESC THEN F=0:RETURN
- 12690 CLS:SYSTEM
- 12830 GOSUB 29730:LOCATE 22,1
- 12840 PRINT"Do you want to add, delete or change stock data";
- 12850 GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
- 12860 GOSUB 29730:IF UPD THEN GOSUB 27740
- 12870 R=0:GOSUB 26440
- 12930 IF MID$(D$,12,1)<>"*" THEN 12960
- 12940 LOCATE 23,1:PRINT"Insert PROGRAM diskette and press ENTER.";
- 12950 GOSUB 29250:IF ESC THEN F=0:RETURN
- 12960 LOCATE 23,1:PRINT"One moment please, loading program ... ";
- 12970 ON ERROR GOTO 12980:RUN"SMADDEL2"
- 12980 IF ERR=53 OR ERR=71 THEN RESUME 12990 ELSE 29930
- 12990 GOSUB 29040:GOTO 12960
- 13050 GOSUB 29730
- 13060 IF MID$(D$,12,1)<>"*" THEN 13110
- 13070 LOCATE 24,1:PRINT"Insert PROGRAM diskette and press ENTER,";
- 13080 PRINT" or press Esc to cancel Help screens.";
- 13090 GOSUB 29250:IF ESC THEN F=0:RETURN
- 13110 ON ERROR GOTO 13310:OPEN H$ FOR INPUT AS #1
- 13120 ON ERROR GOTO 29930:CLS:L=0
- 13130 IF EOF(1) THEN 13270
- 13140 LINE INPUT#1,B$:L=L+1:IF L<24 THEN PRINT B$:GOTO 13130
- 13150 PRINT"Press ENTER key to see next Help screen, ";
- 13160 PRINT"or Esc to cancel Help screen display.";
- 13170 GOSUB 29250:IF NOT ESC THEN CLS:L=1:PRINT B$:GOTO 13130
- 13180 CLOSE#1:F=-1:IF MID$(D$,12,1)<>"*" THEN RETURN
- 13190 CLS:LOCATE 24,1:PRINT"Insert DATA diskette";
- 13200 PRINT" and press ENTER or Esc key.";:GOSUB 29250:RETURN
- 13270 CLOSE#1:F=-1:LOCATE 24,1:IF MID$(D$,12,1)<>"*" THEN 13290
- 13280 PRINT"Insert DATA diskette. ";
- 13290 GOSUB 29240:RETURN
- 13310 IF ERR=53 THEN RESUME 13340
- 13320 IF ERR=71 THEN RESUME 13330 ELSE 29930
- 13330 GOSUB 29040:IF ESC THEN F=0:RETURN ELSE 13110
- 13340 LOCATE 25,1:COLOR 23,0:PRINT"Help screen not available.";
- 13350 COLOR 7,0:BEEP:OK=0:F=0:LOCATE 23,1
- 13360 IF MID$(D$,12,1)<>"*" THEN RETURN
- 13370 PRINT"Insert PROGRAM diskette and press ENTER to try again,"
- 13380 PRINT"or insert DATA diskette and press Esc to cancel Help.";
- 13390 GOSUB 29250:IF ESC THEN RETURN ELSE 13110
- 13550 CLS:DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H20:SCREEN 1,0
- 13560 PRINT MID$(XD$,5,24);:TT=TC:TF=TL+1:TB=TF:IF TF>TC THEN TF=1:TB=1
- 13570 IF CP!(TB)>0 THEN 13650
- 13580 TT=TT-1:TB=TB+1:IF TB>TC THEN TB=1
- 13590 IF TB<>TF THEN 13570
- 13650 LOCATE 1,28:PRINT USING"###";TT;
- 13660 IF TN=1 THEN PRINT"D "; ELSE PRINT"W ";
- 13670 W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);
- 13680 GOSUB 24630:LOCATE 2,1:PRINT"PE=";:GOSUB 24320
- 13690 LOCATE 2,9:PRINT"Y=";:GOSUB 24370
- 13710 IF CP!>=0.125 AND (GL!>0 OR GH!>0) THEN LOCATE 2,16:GOSUB 24430
- 13720 IF SL!=0 OR ABS(SL!)>=999.999 THEN 13840
- 13730 IF SL!<=-99.995 THEN 13790
- 13740 IF SL!<=-9.9995 OR SL!>=99.9995 THEN 13780
- 13750 IF SL!<=-0.9995 OR SL!>=9.9995 THEN 13770
- 13760 LOCATE 2,31:PRINT USING"STOP=#.###";SL!;:GOTO 13840
- 13770 LOCATE 2,30:PRINT USING"STOP=##.###";SL!;:GOTO 13840
- 13780 LOCATE 2,29:PRINT USING"STOP=###.###";SL!;:GOTO 13840
- 13790 LOCATE 2,29:PRINT USING"STOP=####.##";SL!;
- 13840 WL!=999999:WH!=0:SH!=0:J=TL
- 13850 J=J+1:IF J>TC THEN J=1
- 13860 IF SV!(J)>SH! THEN SH!=SV!(J)
- 13870 IF HP!(J)>WH! THEN WH!=HP!(J)
- 13880 IF M1!(J)>WH! THEN WH!=M1!(J)
- 13890 IF M2!(J)>WH! THEN WH!=M2!(J)
- 13900 IF M3!(J)>WH! THEN WH!=M3!(J)
- 13910 IF LP!(J)>0 AND LP!(J)<WL! THEN WL!=LP!(J)
- 13920 IF M1!(J)>0 AND M1!(J)<WL! THEN WL!=M1!(J)
- 13930 IF M2!(J)>0 AND M2!(J)<WL! THEN WL!=M2!(J)
- 13940 IF M3!(J)>0 AND M3!(J)<WL! THEN WL!=M3!(J)
- 13950 IF J<>TL THEN 13850
- 13990 IF WL!>=999999 THEN WL!=0
- 14040 IF INT(WH!+0.9999)>=100 OR WH!-WL!>18 THEN 14160
- 14050 WL!=INT(WL!*9.83333)/10:WH!=INT(WH!*10+0.9999)/10
- 14060 WS!=INT((WH!-WL!)/1.5+0.9999)/10
- 14070 WL!=WL!-INT((WS!*15-(WH!-WL!))*5+0.5)/10:IF WL!<0 THEN WL!=0
- 14080 WH!=WL!+WS!*15:T!=WH!
- 14110 FOR J=3 TO 17:LOCATE J,36
- 14120 IF T!>=9.95 THEN PRINT USING"##.#";T!;:T!=T!-WS!:GOTO 14150
- 14130 IF T!>=0.95 THEN PRINT USING"#.#";T!;:T!=T!-WS!:GOTO 14150
- 14140 IF T!>=0.095 THEN PRINT USING".#";T!;:T!=T!-WS!
- 14150 NEXT J:WS!=WS!/8:GOTO 14310
- 14160 WL!=INT(WL!*0.983333):WH!=INT(WH!+0.9999)
- 14170 WS!=INT((WH!-WL!)/15+0.9999)
- 14180 WL!=WL!-INT((WS!*15-(WH!-WL!))*0.5+0.5):IF WL!<0 THEN WL!=0
- 14190 WH!=WL!+WS!*15:T!=WH!
- 14200 FOR J=3 TO 17:LOCATE J,35:PRINT T!;:T!=T!-WS!:NEXT J:WS!=WS!/8
- 14310 SS!=INT(SH!/(187-141)*0.8+0.9999):MID$(W$,1)=SPACE$(6)
- 14320 LOCATE 23,35:MID$(W$,1)=STR$(SS!):PRINT LEFT$(W$,6);
- 14330 LOCATE 21,35:MID$(W$,1)=STR$(SS!*3):PRINT LEFT$(W$,6);
- 14340 LOCATE 19,35:MID$(W$,1)=STR$(SS!*5):PRINT LEFT$(W$,6);:SS!=SS!*1.25
- 14350 LINE(275,16)-(275,187):LINE(0,187)-(275,187):LINE(0,139)-(275,139)
- 14360 FOR J=19 TO 179 STEP 8:LINE(274,J)-(276,J):NEXT J
- 14430 XD=272\TC:X=273-TC*XD:XS=0:YS=0:J=TL
- 14440 J=J+1:IF J>TC THEN J=1
- 14450 IF CP!(J)>=0.125 THEN 14470
- 14460 IF CP!(J)<0 THEN 14590 ELSE XS=0:YS=0:GOTO 14550
- 14470 Y1=139-CINT((LP!(J)-WL!)/WS!):Y2=139-CINT((HP!(J)-WL!)/WS!)
- 14480 IF Y1<>Y2 THEN LINE(X,Y1)-(X,Y2) ELSE LINE(X,Y1-1)-(X,Y1+1)
- 14490 Y=139-CINT((CP!(J)-WL!)/WS!):LINE(X,Y)-(X+1,Y)
- 14510 IF M1!(J)>=0.01 THEN Y=139-CINT((M1!(J)-WL!)/WS!):LINE(X,Y)-(X-1,Y)
- 14520 IF M3!(J)<0.01 THEN XS=0:YS=0:GOTO 14550
- 14530 Y=139-CINT((M3!(J)-WL!)/WS!):IF YS>0 THEN LINE(XS,YS)-(X,Y)
- 14540 XS=X:YS=Y
- 14550 IF SV!(J)>0 THEN LINE(X,187)-(X,187-CINT(SV!(J)/SS!))
- 14560 IF J=TB OR J=TL THEN LINE(X,189)-(X,187)
- 14590 X=X+XD:IF J<>TL THEN 14440 ELSE RETURN
- 15030 LOCATE 25,1:PRINT"Is printer ready (Y=Yes, N=No)? ";
- 15040 LOCATE 25,33:MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$<>Z$ THEN 15040
- 15050 MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$=Z$ THEN 15050
- 15060 IF LEFT$(C$,1)="Y" OR LEFT$(C$,1)="y" THEN 15090
- 15070 IF LEFT$(C$,1)="N" OR LEFT$(C$,1)="n" THEN RETURN
- 15080 IF LEFT$(C$,1)=CHR$(27) THEN RETURN ELSE BEEP:GOTO 15050
- 15090 J=33:K=1:IF MID$(XD$,1,1)<>" " THEN 15110
- 15100 LOCATE 1,29:PRINT SPACE$(6);MID$(XD$,29,6);:GOTO 15140
- 15110 J=J-1:K=K+1:IF K<=4 AND MID$(XD$,K,1)<>" " THEN 15110
- 15120 LOCATE 1,29:IF J>29 THEN PRINT SPACE$(J-29);
- 15130 PRINT MID$(XD$,29,6);"(";MID$(XD$,1,K-1);")";
- 15140 LOCATE 25,1:PRINT USING"###";TT;
- 15150 IF TN=1 THEN PRINT" DAYS "; ELSE PRINT" WEEKS ";
- 15160 W!=TP!(TB):GOSUB 23420:PRINT MID$(W$,3,8);" THROUGH ";
- 15170 W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);" ";
- 15180 IF MID$(D$,13,1)<>"1" THEN 15530
- 15330 WIDTH"LPT1:",255:DEF SEG=&HB800
- 15340 LPRINT CHR$(13);CHR$(27);"A";CHR$(8);
- 15350 FOR X=0 TO 79
- 15360 FOR Y=1 TO 100
- 15370 T=X+80*(Y-1):C=PEEK(T):IF C=13 THEN C=9
- 15380 B=PEEK(8192+T):IF B=13 THEN B=9
- 15390 P(Y)=C:P(Y+100)=B
- 15400 NEXT:LPRINT CHR$(10);SPACE$(5);CHR$(27);"L";CHR$(32);CHR$(3);
- 15410 FOR Y=100 TO 1 STEP -1:LPRINT STRING$(4,P(Y+100));STRING$(4,P(Y));:NEXT
- 15420 MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF LEFT$(C$,1)=CHR$(27) THEN X=79
- 15430 NEXT:LPRINT CHR$(13);CHR$(12);CHR$(27);"@";:WIDTH"LPT1:",80:GOTO 15580
- 15530 MID$(W$,1)=CHR$(VAL("&HCD")):MID$(W$,2)=CHR$(VAL("&H05"))
- 15540 MID$(W$,3)=CHR$(VAL("&HCB")):MID$(W$,4)=CHR$(0)
- 15550 DEF SEG:MID$(W$,79)=CHR$(PEEK(VARPTR(W$)+1))
- 15560 MID$(W$,80)=CHR$(PEEK(VARPTR(W$)+2)):AD=CVI(MID$(W$,79,2))
- 15570 CALL AD:OPEN"LPT1:"FOR OUTPUT AS #1:PRINT#1,CHR$(12);:CLOSE#1
- 15580 LOCATE 1,28:PRINT USING"###";TT;
- 15590 IF TN=1 THEN PRINT"D "; ELSE PRINT"W ";
- 15600 W!=TP!(TL):GOSUB 23420:PRINT MID$(W$,3,8);:RETURN
- 17040 GOSUB 23530:GOSUB 29730:LOCATE 21,1:PRINT"Is the printer ready";
- 17050 GOSUB 29550:IF ESC OR NOT YES THEN F=0:RETURN
- 17060 LOCATE 21,1:PRINT"Press Esc to stop printing after the next line.";
- 17070 OPEN"LPT1:"FOR OUTPUT AS #1
- 17080 J=TL:M=4:P=0:S=56
- 17110 IF P>0 THEN PRINT#1,CHR$(12);
- 17120 P=P+1:PRINT#1,TAB(M+1);MID$(XD$,5,24);" ";MID$(XD$,29,6);
- 17130 L=1:IF MID$(XD$,1,1)=" " THEN 17160
- 17140 L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 17140
- 17150 PRINT#1," (";MID$(XD$,1,L-1);")";
- 17160 L=1:IF P>1 THEN 17310
- 17170 PRINT#1,TAB(M+50);USING"ANNUAL EARNINGS =###.##";CE!
- 17180 L=L+1:IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN 17210
- 17190 PRINT#1,TAB(M+1);"3-5 YEAR PRICE GOAL";GL!;"-";GH!;
- 17200 PRINT#1,TAB(M+32);USING"####% TO####%";RL;RH;
- 17210 PRINT#1,TAB(M+50);USING"ANNUAL DIVIDEND =###.##";CD!
- 17220 L=L+1:PRINT#1,TAB(M+50);"P/E = ";
- 17230 IF CM!<=0 OR CM!>=99.5 THEN PRINT#1,"NMF";:GOTO 17260
- 17240 IF CM!>=9.995 THEN PRINT#1,USING"##.#";CM!;:GOTO 17260
- 17250 PRINT#1,USING"#.##";CM!;
- 17260 PRINT#1,TAB(M+62);"YLD = ";:IF CY!<0 OR CY!>=99.95 THEN 17310
- 17270 IF CY!>=9.995 THEN PRINT#1,USING"##.#";CY!;:GOTO 17310
- 17280 PRINT#1,USING"#.##";CY!;
- 17310 PRINT#1,:PRINT#1,TAB(M+1);STRING$(72,"-")
- 17320 PRINT#1,TAB(M+12);"VOLUME";
- 17330 PRINT#1,TAB(M+57);"MOVING AVERAGES"
- 17340 PRINT#1,TAB(M+3);"DATE 100's HIGH LOW CLOSE";
- 17350 IF TN<>1 THEN 17370
- 17360 PRINT#1,TAB(M+55);USING"###-DAY ###-DAY";P1;P3:GOTO 17380
- 17370 PRINT#1,TAB(M+54);USING"###-WEEK ###-WEEK";P1;P3
- 17380 PRINT#1,TAB(M+1);STRING$(72,"-"):L=L+5
- 17390 W!=TP!(J):GOSUB 23420:PRINT#1,TAB(M+1);MID$(W$,3,8);
- 17400 PRINT#1,USING"#########";SV!(J);
- 17410 IF CP!(J)<0 THEN PRINT#1,TAB(M+44);"holiday";:GOTO 17450
- 17420 PRINT#1,USING"#######.###";HP!(J);LP!(J);CP!(J);
- 17430 IF M1!(J)>=0.000999999 THEN PRINT#1,TAB(M+54);USING"####.###";M1!(J);
- 17440 IF M3!(J)>=0.000999999 THEN PRINT#1,TAB(M+65);USING"####.###";M3!(J);
- 17450 PRINT#1,:MID$(C$,1)=Z$:MID$(C$,1)=INKEY$
- 17460 IF LEFT$(C$,1)=CHR$(27) THEN 17490
- 17470 L=L+1:J=J-1:IF J<1 THEN J=TC
- 17480 IF J<>TL THEN IF L<=S THEN 17390 ELSE 17110
- 17490 PRINT#1,CHR$(12);:CLOSE#1:F=0:RETURN
- 17560 T=TN:EY=CINT(TP!(TL)/1000):ED=CINT(TP!(TL)-EY*1000)
- 17570 ND=365+ABS(EY MOD 4 = 0):ED=ED+T:IF ED>ND THEN EY=EY+1:ED=ED-ND
- 17580 EW=(INT((EY-1)*365.25)+ED+5) MOD 7:IF EW=0 THEN EW=7
- 17590 IF EW>5 THEN T=8-EW:GOTO 17570
- 17600 W!=EY*1000+ED:J=T5:Y=T2:GOSUB 23530:GOSUB 29730
- 17610 T=TL:TL=TF:TF=TF+1:IF TF>TC THEN TF=1
- 17620 TP!=TP!(TL):SV!=SV!(TL):HP!=HP!(TL):LP!=LP!(TL)
- 17630 CP!=CP!(TL):M1!=M1!(TL):M2!=M2!(TL):M3!=M3!(TL)
- 17640 TP!(TL)=W!:SV!(TL)=0:HP!(TL)=0:LP!(TL)=0:CP!(TL)=0
- 17650 M1!(TL)=0:M2!(TL)=0:M3!(TL)=0
- 17660 IF T6<>T THEN T6=0:GOSUB 23130 ELSE T2=T3:GOSUB 22670
- 17670 IF TN<>1 THEN 17790
- 17680 LOCATE 21,1:PRINT"Is this a holiday";:GOSUB 29550:IF ESC THEN 17970
- 17690 IF YES THEN CP!(TL)=-1:UPD=-1:J=T5:Y=T2:GOSUB 23340:RETURN
- 17790 GOSUB 18530:GOSUB 29730:IF ESC THEN 17970
- 17800 GOSUB 24220:A1!=0:A2!=0:A3!=0:N1=0:N2=0:N3=0:J=TL
- 17810 IF N1>=P1 AND N2>=P2 AND N3>=P3 THEN 17930
- 17820 ON SGN(CP!(J))+2 GOTO 17860,17930,17830
- 17830 IF N1<P1 THEN A1!=A1!+CP!(J):N1=N1+1
- 17840 IF N2<P2 THEN A2!=A2!+CP!(J):N2=N2+1
- 17850 IF N3<P3 THEN A3!=A3!+CP!(J):N3=N3+1
- 17860 J=J-1:IF J<=0 THEN J=TC
- 17870 IF J<>TL THEN 17810
- 17930 IF N1>=P1 AND P1>0 THEN M1!(TL)=A1!/CSNG(N1)
- 17940 IF N2>=P2 AND P2>0 THEN M2!(TL)=A2!/CSNG(N2)
- 17950 IF N3>=P3 AND P3>0 THEN M3!(TL)=A3!/CSNG(N3)
- 17960 J=T5:Y=T2:GOSUB 23870:GOSUB 23920:GOSUB 23970:UPD=-1:RETURN
- 17970 T2=T1:GOSUB 22470:T2=T3:T5=T6:TF=TL:TL=TL-1:IF TL<=0 THEN TL=TC
- 17980 TP!(TF)=TP!:SV!(TF)=SV!:HP!(TF)=HP!:LP!(TF)=LP!
- 17990 CP!(TF)=CP!:M1!(TF)=M1!:M2!(TF)=M2!:M3!(TF)=M3!:RETURN
- 18050 GOSUB 29730:IF CVI(MID$(XD$,35,2))>0 THEN 18110
- 18060 LOCATE 21,1:PRINT"Is this a holiday";
- 18070 GOSUB 29550:IF NOT YES THEN 18110 ELSE IF CP!(T5)<0 THEN RETURN
- 18080 SV!(T5)=0:HP!(T5)=0:LP!(T5)=0:CP!(T5)=-1
- 18090 M1!(T5)=0:M2!(T5)=0:M3!(T5)=0:J=T5:Y=T2:GOSUB 23340
- 18100 IF T5=TL OR (P1+P2+P3<=0) THEN UPD=-1:GOSUB 23580:RETURN ELSE 18230
- 18110 SV!=SV!(T5):HP!=HP!(T5):LP!=LP!(T5):CP!=CP!(T5)
- 18120 J=T5:Y=T2:IF CP!(T5)>=0 THEN GOSUB 23530 ELSE CP!(T5)=0:GOSUB 23340
- 18130 GOSUB 18530:IF ESC THEN 18280 ELSE IF CP!=CP!(T5) THEN 18160
- 18140 IF T5=TL THEN GOSUB 24220
- 18150 IF (P1+P2+P3)>0 THEN 18230
- 18160 UPD=-1:J=T5:Y=T2:GOSUB 23580:RETURN
- 18230 LOCATE 21,1:PRINT"One moment please; computing moving averages ...";
- 18240 GOSUB 21550:UPD=-1:J=T5
- 18250 FOR Y=T2 TO T3
- 18260 GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
- 18270 NEXT Y:J=T5:Y=T2:GOSUB 23580:RETURN
- 18280 SV!(T5)=SV!:HP!(T5)=HP!:LP!(T5)=LP!:CP!(T5)=CP!
- 18290 J=T5:Y=T2:GOSUB 23340:GOSUB 23580:RETURN
- 18530 COLOR 0,7:GOSUB 23620:COLOR 7,0
- 18540 LOCATE 21,1:PRINT"Sales volume (100's)?";SPACE$(14);
- 18550 LOCATE 21,22:R=0:WL!=0:WH!=199999:GOSUB 28110
- 18560 IF ESC THEN RETURN ELSE IF L>0 THEN SV!(T5)=W!:GOTO 18580
- 18570 IF SV!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18560
- 18580 J=T5:GOSUB 23620
- 18610 COLOR 0,7:GOSUB 23670:COLOR 7,0
- 18620 LOCATE 21,1:PRINT"High or ask price?";SPACE$(17);
- 18630 LOCATE 21,19:R=1:WL!=0:WH!=3000:GOSUB 28110
- 18640 IF ESC THEN RETURN ELSE IF L>0 THEN HP!(T5)=W!:GOTO 18660
- 18650 IF HP!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18640
- 18660 J=T5:GOSUB 23670
- 18710 COLOR 0,7:GOSUB 23720:COLOR 7,0
- 18720 LOCATE 21,1:PRINT"Low or bid price?";SPACE$(18);
- 18730 LOCATE 21,18:R=1:WL!=0:WH!=3000:GOSUB 28110
- 18740 IF ESC THEN RETURN ELSE IF L>0 THEN LP!(T5)=W!:GOTO 18810
- 18750 W!=LP!(T5):IF W!<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18740
- 18810 J=T5:GOSUB 23720:IF W!>HP!(T5) THEN 18840
- 18820 IF W!=HP!(T5) THEN CP!(T5)=W!:GOSUB 23770:RETURN
- 18830 IF W!>0 THEN 18910 ELSE GOSUB 29870:GOSUB 28130:GOTO 18740
- 18840 LOCATE 25,1:COLOR 23,0:PRINT"Low/bid exceeds high/ask, re-enter.";
- 18850 COLOR 7,0:OK=0:BEEP:GOTO 18610
- 18910 COLOR 0,7:GOSUB 23770:COLOR 7,0
- 18920 LOCATE 21,1:PRINT"Closing price?";SPACE$(21);
- 18930 LOCATE 21,15:R=1:WL!=0:WH!=3000:GOSUB 28110
- 18940 IF ESC THEN RETURN ELSE IF L>0 THEN CP!(T5)=W!:GOTO 18960
- 18950 IF CP!(T5)<0 THEN GOSUB 29870:GOSUB 28130:GOTO 18940
- 18960 J=T5:GOSUB 23770:IF CP!(T5)>=LP!(T5) AND CP!(T5)<=HP!(T5) THEN RETURN
- 18970 IF CP!(T5)<=0 THEN GOSUB 29870:GOSUB 28130:GOTO 18940
- 18980 LOCATE 25,1:COLOR 23,0:PRINT"Bad range, re-enter high/low/close.";
- 18990 COLOR 7,0:OK=0:BEEP:GOTO 18610
- 19040 IF CP!(T5)<0 THEN 18050
- 19050 GOSUB 29730:ON X GOSUB 19530,19630,19730,19830
- 19060 IF ESC THEN RETURN
- 19070 UPD=-1:IF CP!=CP!(T5) THEN RETURN
- 19080 IF T5=TL THEN GOSUB 24220
- 19090 IF (P1+P2+P3)<=0 THEN RETURN
- 19110 LOCATE 21,1:PRINT"One moment please; computing moving averages ...";
- 19120 GOSUB 21550:J=T5
- 19130 FOR Y=T2 TO T3
- 19140 GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
- 19150 NEXT Y:J=T5:Y=T2:GOSUB 23580:RETURN
- 19530 LOCATE 21,1:PRINT"Sales volume (100's)?";
- 19540 R=0:WL!=0:WH!=199999:GOSUB 28110
- 19550 IF ESC THEN RETURN ELSE IF L>0 THEN SV!(T5)=W!:RETURN
- 19560 IF SV!(T5)>=0 THEN RETURN ELSE GOSUB 29870:GOSUB 28130:GOTO 19550
- 19630 LOCATE 21,1:PRINT"High or ask price?";
- 19640 R=1:WL!=CP!(T5):WH!=3000:GOSUB 28110
- 19650 IF ESC THEN RETURN ELSE IF L>0 THEN HP!(T5)=W!:RETURN
- 19660 IF HP!(T5)>=WL! THEN RETURN
- 19670 GOSUB 29870:GOSUB 28130:GOTO 19650
- 19730 LOCATE 21,1:PRINT"Low or bid price?";
- 19740 R=1:WL!=0:WH!=CP!(T5):GOSUB 28110
- 19750 IF ESC THEN RETURN ELSE IF L>0 THEN LP!(T5)=W!:RETURN
- 19760 IF LP!(T5)>=WL! AND LP!(T5)<=WH! THEN RETURN
- 19770 GOSUB 29870:GOSUB 28130:GOTO 19750
- 19830 LOCATE 21,1:PRINT"Closing price?";
- 19840 R=1:WL!=LP!(T5):WH!=HP!(T5):GOSUB 28110
- 19850 IF ESC THEN RETURN ELSE IF L>0 THEN 19890
- 19860 IF CP!(T5)>=WL! AND CP!(T5)<=WH! THEN RETURN
- 19870 GOSUB 29870:GOSUB 28130:GOTO 19850
- 19890 CP!(T5)=W!:RETURN
- 20040 GOSUB 29730:LOCATE 21,1
- 20050 PRINT"This will adjust all the numbers ABOVE t";
- 20060 PRINT"he selector block. You type in two num-";
- 20070 PRINT"bers, for example 3 and 2 for a 3-for-2 ";
- 20080 PRINT"stock split. The first can be a decimal,";
- 20090 PRINT"for example 1.05-to-1 for a 5% dividend;";
- 20100 PRINT" but the second must be a whole number. ";
- 20110 PRINT"Type the numbers here: - FOR -";
- 20120 PRINT" (Press Esc to cancel)";
- 20130 LOCATE 24,23:R=1:WL!=1:WH!=10:GOSUB 28110
- 20140 IF L<=0 THEN RETURN
- 20150 T!=INT(W!*100+0.5)/100:LOCATE 24,23:PRINT USING"#######.## ";T!;
- 20160 IF T!<2 AND T!>1 THEN U!=1:LOCATE 24,42:PRINT"1";:GOTO 20240
- 20210 LOCATE 24,41:R=0:WL!=1:WH!=10:GOSUB 28110
- 20220 IF L<=0 THEN RETURN
- 20230 U!=W!:LOCATE 24,41:PRINT SPACE$(11);:LOCATE 24,41:PRINT U!;
- 20240 IF T!>U! THEN 20310 ELSE IF T!<U! THEN 20270
- 20250 LOCATE 25,1:COLOR 23,0:PRINT"1.00 ratio illegal, try again.";
- 20260 COLOR 7,0:OK=0:BEEP:LOCATE 24,1:GOTO 20110
- 20270 LOCATE 25,1:COLOR 23,0:PRINT"WARNING - this is a reverse split!";
- 20280 COLOR 7,0:BEEP:OK=0
- 20310 LOCATE 24,52:PRINT"Is this OK";SPACE$(18);
- 20320 LOCATE 24,62:GOSUB 29550:IF NOT YES THEN LOCATE 24,1:GOTO 20110
- 20330 LOCATE 25,1:PRINT"Re-computing high/low/close";
- 20340 PRINT" and moving averages ...";:W!=U!/T!:J=TL
- 20410 J=J+1:IF J>TC THEN J=1
- 20420 IF J=T5 THEN 20510
- 20430 IF CP!(J)<=0 THEN 20410
- 20440 SV!(J)=SV!(J)/W!:HP!(J)=HP!(J)*W!
- 20450 LP!(J)=LP!(J)*W!:CP!(J)=CP!(J)*W!
- 20460 IF M1!(J)>0 THEN M1!(J)=M1!(J)*W!
- 20470 IF M2!(J)>0 THEN M2!(J)=M2!(J)*W!
- 20480 IF M3!(J)>0 THEN M3!(J)=M3!(J)*W!
- 20490 GOTO 20410
- 20510 J=T4:FOR Y=T1 TO T3
- 20520 GOSUB 23620:GOSUB 23670:GOSUB 23720:GOSUB 23770
- 20530 GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
- 20540 NEXT Y:J=T5:Y=T2:GOSUB 23580:UPD=-1:LOCATE 25,1:PRINT SPACE$(51);
- 20550 H1=21:H2=25:G1=1:G2=80:GOSUB 29740:LOCATE 23,1
- 20560 PRINT"Do you want to adjust dividends, earnings and price goals"
- 20570 PRINT"(Reply N if current values already refle";
- 20580 PRINT"ct the split or dividend.)";
- 20590 LOCATE 23,58:GOSUB 29550:IF NOT YES THEN RETURN
- 20630 LOCATE 24,1:PRINT SPACE$(79);
- 20640 CD!=CD!*W!:MID$(XD$,39,2)=MKI$(CINT(CD!*100))
- 20650 CE!=CE!*W!:MID$(XD$,41,2)=MKI$(CINT(CE!*100))
- 20660 SL!=SL!*W!:MID$(XD$,43,2)=MKI$(CINT(SL!*32))
- 20670 GL!=GL!*W!:MID$(XD$,45,2)=MKI$(CINT(GL!*32))
- 20680 GH!=GH!*W!:MID$(XD$,47,2)=MKI$(CINT(GH!*32))
- 20690 GOSUB 24220:LSET XR$(X5)=XD$:R=1:GOSUB 26440:RETURN
- 21030 GOSUB 23530:GOSUB 29730:N1=P1:N2=P2:N3=P3:IF UPD THEN GOSUB 27740
- 21040 LOCATE 21,1:PRINT"The moving average periods must be at le";
- 21050 PRINT"ast 3 but not more than";TC;"days/weeks."
- 21060 PRINT"Enter zero where moving averages are not";
- 21070 PRINT" wanted. For best results, enter the"
- 21080 PRINT"long-term (or only) period last, so its ";
- 21090 PRINT"averages are in the rightmost column.";
- 21110 LOCATE 24,1:PRINT"Enter the FIRST moving average period:";
- 21120 R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
- 21130 IF L<0 THEN 21490 ELSE IF L=0 THEN 21210
- 21140 IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21130
- 21150 P1=CINT(W!):GOSUB 24470:GOTO 21210
- 21160 LOCATE 24,1:PRINT"Enter the MIDDLE moving average period:";
- 21170 R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
- 21180 IF L<0 THEN 21490 ELSE IF L=0 THEN 21210
- 21190 IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21180
- 21200 P2=CINT(W!):GOSUB 24520
- 21210 LOCATE 24,1:PRINT"Enter the LAST moving average period:";
- 21220 R=0:WL!=0:WH!=CSNG(TC):GOSUB 28110
- 21230 IF L<0 THEN 21490 ELSE IF L=0 THEN 21260
- 21240 IF W!=1 OR W!=2 THEN GOSUB 21460:GOSUB 28130:GOTO 21230
- 21250 P3=CINT(W!):GOSUB 24570
- 21260 IF N1=P1 AND N2=P2 AND N3=P3 THEN RETURN
- 21270 J=TF:LOCATE 24,1
- 21280 PRINT"One moment please, computing moving averages ...";SPACE$(31);
- 21310 IF N1<>P1 THEN M1!(J)=0
- 21320 IF N2<>P2 THEN M2!(J)=0
- 21330 IF N3<>P3 THEN M3!(J)=0
- 21340 J=J+1:IF J>TC THEN J=1
- 21350 IF J<>TF THEN 21310
- 21360 IF P1>0 OR P2>0 OR P3>0 THEN GOSUB 21550
- 21370 J=T4:FOR Y=T1 TO T3
- 21380 GOSUB 23870:GOSUB 23920:GOSUB 23970:J=J+1:IF J>TC THEN J=1
- 21390 NEXT Y:GOSUB 29730
- 21410 LOCATE 21,1:PRINT"Are these moving averages to be permanent";
- 21420 GOSUB 29550:UPD=YES:IF YES THEN RETURN
- 21430 LOCATE 22,1:PRINT"You must then go back to the (S)elect screen,"
- 21440 PRINT"before making any changes to volume or prices.";
- 21450 LOCATE 24,1:GOSUB 29240:RETURN
- 21460 LOCATE 25,1:COLOR 23,0:PRINT"Must be at least 3 days or weeks.";
- 21470 COLOR 7,0:OK=0:BEEP:RETURN
- 21490 P1=N1:GOSUB 23870:P2=N2:GOSUB 23920:P3=N3:GOSUB 23970:RETURN
- 21530 IF P1<=0 AND P2<=0 AND P3<=0 THEN RETURN
- 21540 LOCATE 25,1:PRINT"Computing moving averages ...";
- 21550 N1=0:N2=0:N3=0:S1=1:S2=1:S3=1
- 21560 B1=TL:B2=TL:B3=TL:A1!=0:A2!=0:A3!=0:J=TF
- 21590 IF CP!(J)<=0 THEN 21940
- 21610 IF P1<=0 THEN 21710
- 21620 A1!=A1!+CP!(J):N1=N1+1
- 21630 IF N1<=P1 THEN 21670
- 21640 B1=B1+1:IF B1>TC THEN B1=1
- 21650 IF CP!(B1)<=0 THEN 21640
- 21660 A1!=A1!-CP!(B1):N1=N1-1
- 21670 IF N1>=P1 THEN M1!(J)=A1!/CSNG(N1):GOTO 21710
- 21680 IF M1!(J)<=0 THEN S1=0
- 21690 IF S1=0 THEN M1!(J)=0
- 21710 IF P2<=0 THEN 21810
- 21720 A2!=A2!+CP!(J):N2=N2+1
- 21730 IF N2<=P2 THEN 21770
- 21740 B2=B2+1:IF B2>TC THEN B2=1
- 21750 IF CP!(B2)<=0 THEN 21740
- 21760 A2!=A2!-CP!(B2):N2=N2-1
- 21770 IF N2>=P2 THEN M2!(J)=A2!/CSNG(N2):GOTO 21810
- 21780 IF M2!(J)<=0 THEN S2=0
- 21790 IF S2=0 THEN M2!(J)=0
- 21810 IF P3<=0 THEN 21970
- 21820 A3!=A3!+CP!(J):N3=N3+1
- 21830 IF N3<=P3 THEN 21870
- 21840 B3=B3+1:IF B3>TC THEN B3=1
- 21850 IF CP!(B3)<=0 THEN 21840
- 21860 A3!=A3!-CP!(B3):N3=N3-1
- 21870 IF N3>=P3 THEN M3!(J)=A3!/CSNG(N3):GOTO 21970
- 21880 IF M3!(J)<=0 THEN S3=0
- 21890 IF S3=0 THEN M3!(J)=0
- 21930 GOTO 21970
- 21940 IF CP!(J)<0 THEN 21970
- 21950 N1=0:N2=0:N3=0:S1=1:S2=1:S3=1:B1=J:B2=J:B3=J
- 21960 A1!=0:A2!=0:A3!=0:M1!(J)=0:M2!(J)=0:M3!(J)=0
- 21970 IF J=TL THEN RETURN
- 21980 J=J+1:IF J>TC THEN J=1
- 21990 GOTO 21590
- 22340 IF X>1 AND X<=4 THEN X=X-1:RETURN ELSE GOSUB 29850:RETURN
- 22390 IF X>=1 AND X<4 THEN X=X+1:RETURN ELSE GOSUB 29850:RETURN
- 22450 IF T2>T1 AND T2<=T3 THEN 22580
- 22460 IF T2<>T1 OR T5=TF THEN GOSUB 29850:RETURN
- 22470 T4=T4-1:IF T4<=0 THEN T4=TC
- 22480 T5=T4:T6=T6-1:IF T6<=0 THEN T6=TC
- 22490 H1=T1:G1=1:H2=T3:G2=80:Z=0:L=1
- 22500 SC(27)=&H7B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
- 22510 J=T5:Y=T2:GOSUB 23330:RETURN
- 22580 T5=T5-1:IF T5<=0 THEN T5=TC
- 22590 T2=T2-1:RETURN
- 22650 IF T2>=T1 AND T2<T3 THEN 22780
- 22660 IF T2<>T3 OR T5=TL THEN GOSUB 29850:RETURN
- 22670 T6=T6+1:IF T6>TC THEN T6=1
- 22680 T5=T6:T4=T4+1:IF T4>TC THEN T4=1
- 22690 H1=T1:G1=1:H2=T3:G2=80:Z=0:L=1
- 22700 SC(27)=&H6B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
- 22710 J=T5:Y=T2:GOSUB 23330:RETURN
- 22780 T5=T5+1:IF T5>TC THEN T5=1
- 22790 T2=T2+1:RETURN
- 22840 J=1:IF T4=TF THEN 22890
- 22850 T4=T4-1:IF T4<=0 THEN T4=TC
- 22860 J=J+1:IF T4<>TF AND J<=10 THEN 22850
- 22870 GOSUB 23250:T5=T4:T2=T1:RETURN
- 22890 IF T5<>T4 THEN T5=T4:T2=T1:RETURN ELSE GOSUB 29850:RETURN
- 22940 J=1:IF T6=TL THEN 22990
- 22950 T4=T4+1:IF T4>TC THEN T4=1
- 22960 T6=T6+1:IF T6>TC THEN T6=1
- 22970 J=J+1:IF T6<>TL AND J<=10 THEN 22950
- 22980 GOSUB 23250:T5=T6:T2=T3:RETURN
- 22990 IF T5<>T6 THEN T5=T6:T2=T3:RETURN ELSE GOSUB 29850:RETURN
- 23030 IF T4=TF THEN 23080
- 23040 T4=TF:GOSUB 23250:GOTO 23090
- 23080 IF T5=TF THEN GOSUB 29850:RETURN
- 23090 T5=TF:T2=T1:RETURN
- 23130 IF T6=TL THEN 23180
- 23140 IF TC<=20-T1 THEN T4=TF:GOTO 23160
- 23150 T4=TL-(19-T1):IF T4<=0 THEN T4=T4+TC
- 23160 GOSUB 23250:GOTO 23190
- 23180 IF T5=TL THEN GOSUB 29850:RETURN
- 23190 T5=TL:T2=T3:RETURN
- 23250 T3=T1:T6=T4
- 23260 J=T6:Y=T3:GOSUB 23330
- 23270 IF T6=TL OR T3>=19 THEN RETURN
- 23280 T3=T3+1:T6=T6+1:IF T6>TC THEN T6=1
- 23290 GOTO 23260
- 23330 W!=TP!(J):GOSUB 23420:LOCATE Y,8:PRINT MID$(W$,3,8);
- 23340 GOSUB 23620:GOSUB 23670:GOSUB 23720:GOSUB 23770
- 23350 GOSUB 23870:GOSUB 23920:GOSUB 23970:RETURN
- 23420 IF W!<=0 THEN MID$(W$,1)=SPACE$(10):RETURN
- 23430 DY=CINT(W!/1000):DD=CINT(W!-DY*1000)
- 23440 DY=DY+20:IF DY>=100 THEN DY=DY-100
- 23450 MT(2)=28+ABS(DY MOD 4 = 0):DM=1
- 23460 IF DD>MT(DM) THEN DD=DD-MT(DM):DM=DM+1:GOTO 23460
- 23470 MID$(W$,7)=STR$(DY+100):MID$(W$,8)="-"
- 23480 MID$(W$,4)=STR$(DD+100):MID$(W$,5)="-"
- 23490 MID$(W$,1)=STR$(DM+100):RETURN
- 23530 ON X GOTO 23620,23670,23720,23770
- 23580 COLOR 0,7:ON X GOSUB 23620,23670,23720,23770
- 23590 COLOR 7,0:RETURN
- 23620 LOCATE Y,18
- 23630 PRINT USING"###### ";SV!(J);:RETURN
- 23670 LOCATE Y,25
- 23680 IF CP!(J)<0 THEN PRINT SPACE$(10);:RETURN
- 23690 PRINT USING"#####.### ";HP!(J);:RETURN
- 23720 LOCATE Y,35
- 23730 IF CP!(J)<0 THEN PRINT SPACE$(10);:RETURN
- 23740 PRINT USING"#####.### ";LP!(J);:RETURN
- 23770 LOCATE Y,45
- 23780 IF CP!(J)<0 THEN PRINT" holiday ";:RETURN
- 23790 PRINT USING"#####.### ";CP!(J);:RETURN
- 23870 LOCATE Y,56
- 23880 IF M1!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
- 23890 PRINT USING"####.###";M1!(J);:RETURN
- 23920 RETURN
- 23930 IF M2!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
- 23940 PRINT USING"####.###";M2!(J);:RETURN
- 23970 LOCATE Y,66
- 23980 IF M3!(J)<0.000999999 THEN PRINT SPACE$(8);:RETURN
- 23990 PRINT USING"####.###";M3!(J);:RETURN
- 24030 CLS:PRINT TAB(1);MID$(XD$,5,24);" ";MID$(XD$,29,6);
- 24040 L=1:IF MID$(XD$,1,1)=" " THEN 24070
- 24050 L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 24050
- 24060 PRINT"(";MID$(XD$,1,L-1);")";
- 24070 GOSUB 24630:IF SL!=0 THEN 24090
- 24080 LOCATE 1,41:PRINT USING"STOP LIMIT =####.###";SL!;
- 24090 LOCATE 1,64:PRINT"P/E RATIO = ";:GOSUB 24320
- 24150 LOCATE 2,1:PRINT"ANNUAL POTENTIAL RETURN =";:GOSUB 24420
- 24160 LOCATE 2,64:PRINT"YIELD (%) = ";:GOSUB 24370
- 24170 LOCATE 4,19:PRINT"VOLUME";:LOCATE 4,59:PRINT"MOVING AVERAGES";
- 24180 LOCATE 5,10:PRINT"DATE (100s) HIGH LOW CLOSE";
- 24190 GOSUB 24470:GOSUB 24570:T1=7:RETURN
- 24220 GOSUB 24630:LOCATE 1,76:GOSUB 24320:LOCATE 2,76:GOSUB 24370
- 24230 IF SL!<>0 THEN LOCATE 1,53:PRINT USING"####.###";SL!;
- 24240 LOCATE 2,26:GOSUB 24420:PRINT SPACE$(39-POS(0));:RETURN
- 24320 IF CM!<=0 OR CM!>=99.95 THEN PRINT"NMF ";:RETURN
- 24330 IF CM!>=9.995 THEN PRINT USING"##.#";CM!;:RETURN
- 24340 PRINT USING"#.##";CM!;:RETURN
- 24370 IF CY!<0 OR CY!>=99.95 THEN PRINT" ";:RETURN
- 24380 IF CY!>=9.995 THEN PRINT USING"##.#";CY!;:RETURN
- 24390 PRINT USING"#.##";CY!;:RETURN
- 24420 IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN PRINT" NMF";:RETURN
- 24430 PRINT RL;CHR$(29);"% TO";RH;CHR$(29);"%";:RETURN
- 24470 LOCATE 5,56:IF P1<=0 THEN PRINT SPACE$(8);:RETURN
- 24480 IF TN=1 THEN PRINT USING"####";P1;:PRINT"-DAY";:RETURN
- 24490 PRINT USING"###";P1;:PRINT"-WEEK";:RETURN
- 24520 RETURN:IF P2<=0 THEN PRINT SPACE$(8);:RETURN
- 24530 IF TN=1 THEN PRINT USING"####";P2;:PRINT"-DAY";:RETURN
- 24540 PRINT USING"###";P2;:PRINT"-WEEK";:RETURN
- 24570 LOCATE 5,66:IF P3<=0 THEN PRINT SPACE$(8);:RETURN
- 24580 IF TN=1 THEN PRINT USING"####";P3;:PRINT"-DAY";:RETURN
- 24590 PRINT USING"###";P3;:PRINT"-WEEK";:RETURN
- 24630 CP!=CP!(TL)
- 24640 CE!=CSNG(CVI(MID$(XD$,41,2)))/100
- 24650 CM!=0:IF CE!>=0.01 THEN CM!=CP!/CE!
- 24660 CD!=CSNG(CVI(MID$(XD$,39,2)))/100
- 24670 CY!=0:IF CP!>=0.125 THEN CY!=CD!/CP!*100
- 24680 SL!=CSNG(CVI(MID$(XD$,43,2)))/32
- 24720 GL!=CSNG(CVI(MID$(XD$,45,2)))/32
- 24730 GH!=CSNG(CVI(MID$(XD$,47,2)))/32
- 24740 IF CP!<0.125 OR (GL!<=0 AND GH!<=0) THEN 24790
- 24750 IF GL!>0 AND GH!>0 THEN 24770
- 24760 IF GL!>0 THEN GH!=GL! ELSE GL!=GH!
- 24770 RL=CINT(((GL!/CP!)^0.2-1)*100+CY!)
- 24780 RH=CINT(((GH!/CP!)^0.2-1)*100+CY!)
- 24790 RETURN
- 24850 IF X2>X1 AND X2<=X3 AND X5>1 AND X5<=XC THEN X2=X2-1:X5=X5-1:RETURN
- 24860 IF X2<>X1 OR X5<=1 OR X5>XC THEN GOSUB 29850:RETURN
- 24870 X4=X4-1:X5=X4:X6=X6-1:H1=X1:G1=1:H2=X3:G2=80:Z=0:L=1
- 24880 SC(27)=&H7B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
- 24890 MID$(XD$,1)=XR$(X5):LOCATE X2,16,0:GOSUB 25520:GOSUB 25570:RETURN
- 24950 IF X2>=X1 AND X2<X3 AND X5>=1 AND X5<XC THEN X2=X2+1:X5=X5+1:RETURN
- 24960 IF X2<>X3 OR X5<1 OR X5>=XC THEN GOSUB 29850:RETURN
- 24970 X6=X6+1:X5=X6:X4=X4+1:H1=X1:G1=1:H2=X3:G2=80:Z=0:L=1
- 24980 SC(27)=&H6B4:DEF SEG:AD=VARPTR(SC(1)):CALL AD(H1,G1,H2,G2,Z,L)
- 24990 MID$(XD$,1)=XR$(X5):LOCATE X2,16,0:GOSUB 25520:GOSUB 25570:RETURN
- 25040 IF X4=1 THEN 25080
- 25050 IF X4<1 OR X4>XC THEN GOSUB 29850:RETURN
- 25060 X4=X4-17+X1:IF X4<1 THEN X4=1
- 25070 GOSUB 25440:GOTO 25090
- 25080 IF X2<=X1 OR X2>X3 THEN GOSUB 29850:RETURN
- 25090 X5=X4:X2=X1:RETURN
- 25140 IF X6=XC THEN 25190
- 25150 IF X4<1 OR X4>XC THEN GOSUB 29850:RETURN
- 25160 X4=X4+17-X1:T=XC-19+X1:IF T<1 THEN T=1
- 25170 IF X4>T THEN X4=T
- 25180 GOSUB 25440:X2=X3:X5=X6:RETURN
- 25190 IF X2<X3 AND X2>=X1 THEN X2=X3:X5=X6:RETURN ELSE GOSUB 29850:RETURN
- 25230 IF X4=1 THEN 25280
- 25240 X4=1:GOSUB 25440:GOTO 25290
- 25280 IF X5=1 THEN GOSUB 29850:RETURN
- 25290 X5=1:X2=X1:RETURN
- 25330 IF X6=XC THEN 25380
- 25340 X4=XC:X2=X1
- 25350 IF X4=1 OR X2>=19 THEN GOSUB 25440:GOTO 25390
- 25360 X4=X4-1:X2=X2+1:GOTO 25350
- 25380 IF X5=XC THEN GOSUB 29850:RETURN
- 25390 X5=XC:X2=X3:RETURN
- 25440 X3=X1:X6=X4
- 25450 MID$(XD$,1)=XR$(X6):LOCATE X3,16:GOSUB 25520:GOSUB 25570
- 25460 IF X6<XC AND X3<19 THEN X6=X6+1:X3=X3+1:GOTO 25450 ELSE RETURN
- 25520 PRINT MID$(XD$,5,24);" ";MID$(XD$,29,6);
- 25530 L=1:IF MID$(XD$,1,1)=" " THEN PRINT SPACE$(10);:RETURN
- 25540 L=L+1:IF L<=4 AND MID$(XD$,L,1)<>" " THEN 25540
- 25550 PRINT" (";MID$(XD$,1,L-1);")";SPACE$(9-L);:RETURN
- 25570 IF CVI(MID$(XD$,35,2))<0 THEN PRINT" DAILY":RETURN
- 25580 IF CVI(MID$(XD$,35,2))>0 THEN PRINT"WEEKLY":RETURN
- 25590 PRINT" NONE":RETURN
- 25820 CLS:X1=0
- 25830 X1=X1+1:LOCATE X1,16
- 25840 PRINT"STOCK CHARTING/DATA ENTRY - RELEASE 2.1 UPDATE ";
- 25850 X1=X1+1:LOCATE X1,16
- 25860 PRINT"NAME OF STOCK------------SYMBOL (EXCH)---INTERVAL";
- 25890 X1=X1+2:RETURN
- 25930 LOCATE X2,40:PRINT" ";MID$(XD$,29,6);" ";:RETURN
- 25980 MID$(XD$,1)=XR$(X5)
- 25990 LOCATE X2,40:COLOR 0,7:PRINT" ";MID$(XD$,29,6);" ";:COLOR 7,0:RETURN
- 26440 GOSUB 26830:IF ESC THEN 26440
- 26450 MID$(XD$,1)="SMX2":MID$(XD$,5)=MKI$(64)
- 26460 MID$(XD$,7)=MKI$(XM):MID$(XD$,9)=MKI$(XC)
- 26470 MID$(XD$,11)=MKI$(X4):MID$(XD$,13)=MKI$(X5)
- 26480 FOR K=15 TO 63 STEP 2:MID$(XD$,K)=MKI$(0):NEXT K
- 26490 LSET XB$=XD$:PUT#2:IF R=0 THEN 26590
- 26580 FOR J=1 TO XC:LSET XB$=XR$(J):PUT#2:NEXT J
- 26590 CLOSE#2:LSET XD$=XR$(X5):RETURN
- 26640 GOSUB 26830:IF ESC THEN RETURN
- 26650 IF LOF(2)<=0 THEN XC=-1:CLOSE#2:KILL LEFT$(W$,L):RETURN
- 26660 GET#2:V2=0:IF MID$(XB$,1,4)="SMX2" THEN V2=-1:GOTO 26710
- 26670 XC=CVI(MID$(XB$,3,2)):IF XC>0 THEN X4=1:X5=1:GOTO 26740
- 26680 X4=0:X5=0:CLOSE#2:RETURN
- 26710 XC=CVI(MID$(XB$,9,2))
- 26720 X4=CVI(MID$(XB$,11,2)):X5=CVI(MID$(XB$,13,2))
- 26730 IF XC<=0 THEN CLOSE#2:RETURN
- 26740 FOR J=1 TO XC
- 26750 GET#2:LSET XR$(J)=XB$:IF V2 THEN 26790
- 26760 W!=CVS(MID$(XB$,37,4)):MID$(XR$(J),39)=MKI$(CINT(W!*100))
- 26770 W!=CVS(MID$(XB$,41,4)):MID$(XR$(J),41)=MKI$(CINT(W!*100))
- 26780 MID$(XR$(J),37)=MKI$(0):MID$(XR$(J),43)=MKI$(0)
- 26790 NEXT J:CLOSE#2:RETURN
- 26830 MID$(W$,1)=SPACE$(80):L=1:IF MID$(D$,12,1)<"A" THEN 26850
- 26840 MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
- 26850 MID$(W$,L)="INDEXFIL.SMX":L=L+11:ESC=0
- 26950 ON ERROR GOTO 26980
- 26960 OPEN LEFT$(W$,L) AS #2 LEN=64:ON ERROR GOTO 29930
- 26970 FIELD#2,64 AS XB$:RETURN
- 26980 IF ERR=71 THEN RESUME 26990 ELSE 29930
- 26990 GOSUB 29140:IF ESC THEN RETURN ELSE 26950
- 27340 GOSUB 29730:MID$(W$,1)=SPACE$(80):K=29
- 27350 IF MID$(XD$,K,1)=" " THEN K=K+1:IF K<=34 THEN 27350
- 27360 L=1:IF MID$(D$,12,1)<"A" THEN 27380
- 27370 MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
- 27380 MID$(W$,L)="D":IF CVI(MID$(XD$,35,2))>0 THEN MID$(W$,L)="W"
- 27390 L=L+1:MID$(W$,L)=MID$(XD$,K,35-K):L=L+35-K:MID$(W$,L)=".SMP":L=L+3
- 27410 LOCATE 23,1:PRINT"Loading volume and price data, one moment please ...";
- 27420 ON ERROR GOTO 27470
- 27430 OPEN LEFT$(W$,L) AS #3 LEN=32:ON ERROR GOTO 29930
- 27440 IF LOF(3)>0 THEN 27490 ELSE CLOSE#3:KILL LEFT$(W$,L)
- 27450 LOCATE 25,1:COLOR 23,0:PRINT"No price history file found.";
- 27460 COLOR 7,0:OK=0:BEEP:ESC=-1:RETURN
- 27470 IF ERR=71 THEN RESUME 27480 ELSE 29930
- 27480 GOSUB 29140:IF ESC THEN RETURN ELSE 27410
- 27490 FIELD#3,32 AS PB$:GET#3:IF LEFT$(PB$,4)="SMP2" THEN 27610
- 27510 TC=CVI(MID$(PB$,1,2)):TN=CVI(MID$(PB$,3,2)):TL=CVI(MID$(PB$,5,2))
- 27520 P1=CVI(MID$(PB$,7,2)):P2=CVI(MID$(PB$,9,2)):P3=CVI(MID$(PB$,11,2))
- 27530 GOTO 27630
- 27610 TC=CVI(MID$(PB$,9,2)):TN=CVI(MID$(PB$,11,2)):TL=CVI(MID$(PB$,13,2))
- 27620 P1=CVI(MID$(PB$,15,2)):P2=CVI(MID$(PB$,17,2)):P3=CVI(MID$(PB$,19,2))
- 27630 TF=TL+1:IF TF>TC THEN TF=1
- 27640 FOR J=1 TO TC:GET#3
- 27650 TP!(J)=CVS(MID$(PB$,1,4)):SV!(J)=CVS(MID$(PB$,5,4))
- 27660 HP!(J)=CVS(MID$(PB$,9,4)):LP!(J)=CVS(MID$(PB$,13,4))
- 27670 CP!(J)=CVS(MID$(PB$,17,4)):M1!(J)=CVS(MID$(PB$,21,4))
- 27680 M2!(J)=CVS(MID$(PB$,25,4)):M3!(J)=CVS(MID$(PB$,29,4))
- 27690 NEXT J:CLOSE#3:ESC=0:UPD=0:RETURN
- 27740 GOSUB 29730:MID$(W$,1)=SPACE$(80):K=29
- 27750 IF MID$(XD$,K,1)=" " THEN K=K+1:IF K<=34 THEN 27750
- 27760 L=1:IF MID$(D$,12,1)<"A" THEN 27780
- 27770 MID$(W$,1)=MID$(D$,12,1):MID$(W$,2)=":":L=3
- 27780 MID$(W$,L)="D":IF CVI(MID$(XD$,35,2))>0 THEN MID$(W$,L)="W"
- 27790 L=L+1:MID$(W$,L)=MID$(XD$,K,35-K):L=L+35-K:MID$(W$,L)=".SMP":L=L+3
- 27810 LOCATE 23,1:PRINT"Writing volume and price data, one moment please ...";
- 27820 ON ERROR GOTO 27850
- 27830 OPEN LEFT$(W$,L) AS #3 LEN=32:ON ERROR GOTO 29930
- 27840 FIELD#3,32 AS PB$:GOTO 27870
- 27850 IF ERR=71 THEN RESUME 27860 ELSE 29930
- 27860 GOSUB 29140:GOTO 27810
- 27870 MID$(PD$,1)="SMP2":MID$(PD$,5)=MKI$(32):MID$(PD$,7)=MKI$(TC)
- 27880 MID$(PD$,9)=MKI$(TC):MID$(PD$,11)=MKI$(TN):MID$(PD$,13)=MKI$(TL)
- 27890 MID$(PD$,15)=MKI$(P1):MID$(PD$,17)=MKI$(P2):MID$(PD$,19)=MKI$(P3)
- 27910 FOR K=21 TO 31 STEP 2:MID$(PD$,K)=Z$:NEXT K
- 27920 LSET PB$=PD$:PUT#3
- 27930 FOR J=1 TO TC
- 27940 MID$(PD$,1)=MKS$(TP!(J)):MID$(PD$,5)=MKS$(SV!(J))
- 27950 MID$(PD$,9)=MKS$(HP!(J)):MID$(PD$,13)=MKS$(LP!(J))
- 27960 MID$(PD$,17)=MKS$(CP!(J)):MID$(PD$,21)=MKS$(M1!(J))
- 27970 MID$(PD$,25)=MKS$(M2!(J)):MID$(PD$,29)=MKS$(M3!(J))
- 27980 LSET PB$=PD$:PUT#3
- 27990 NEXT J:CLOSE#3:UPD=0:RETURN
- 28110 H=CSRLIN:G=POS(0)+1:Q=9:MID$(W$,1)=SPACE$(Q)
- 28120 COLOR 0,7:PRINT SPACE$(Q+2);:COLOR 7,0:P=1
- 28130 LOCATE H,G,1:GOSUB 29660:LOCATE H,G,0
- 28140 IF LEFT$(C$,1)>="0" AND LEFT$(C$,1)<="9" THEN 28210
- 28150 IF LEFT$(C$,1)="." OR LEFT$(C$,1)="/" THEN 28210
- 28160 IF LEFT$(C$,1)=CHR$(32) THEN IF P>1 THEN 28210 ELSE 28580
- 28170 IF LEFT$(C$,1)=CHR$(13) THEN 28310
- 28180 IF LEFT$(C$,1)=CHR$(27) THEN L=-1:RETURN
- 28190 IF LEFT$(C$,1)=CHR$(8) THEN 28240 ELSE GOSUB 29830:GOTO 28130
- 28210 IF P>Q THEN GOSUB 29850:GOTO 28130
- 28220 MID$(W$,P,1)=LEFT$(C$,1):G=G+1:P=P+1
- 28230 COLOR 0,7:PRINT LEFT$(C$,1);:COLOR 7,0:GOTO 28130
- 28240 IF P<=1 THEN GOSUB 29850:GOTO 28130
- 28250 G=G-1:P=P-1:MID$(W$,P,1)=" "
- 28260 LOCATE H,G:COLOR 0,7:PRINT" ";:COLOR 7,0:GOTO 28130
- 28310 W!=0:L=P-1:IF L<=0 THEN RETURN
- 28320 J=1:K=1:GOSUB 28640:IF K<=J THEN 28350 ELSE IF K>L THEN 28380
- 28330 IF MID$(W$,K,1)=" " THEN 28410
- 28340 IF MID$(W$,K,1)="/" THEN 28430
- 28350 IF MID$(W$,K,1)<>"." THEN 28560
- 28360 IF K>=L THEN 28560
- 28370 K=K+1:J=K:GOSUB 28640:IF K<=J THEN 28560
- 28380 J=1:W!=VAL(MID$(W$,J,K-J)):IF K>L THEN 28520
- 28390 GOSUB 28680:IF K>L THEN 28520 ELSE 28560
- 28410 W!=VAL(MID$(W$,J,K-J)):GOSUB 28680:IF K>L THEN 28530
- 28420 J=K:GOSUB 28640:IF K>L OR MID$(W$,K,1)<>"/" THEN 28560
- 28430 IF K<=J OR K>=L THEN 28570
- 28440 T!=VAL(MID$(W$,J,K-J)):K=K+1:J=K:GOSUB 28640
- 28450 IF K<=J THEN 28570
- 28460 U!=VAL(MID$(W$,J,K-J)):IF K>L THEN 28480
- 28470 GOSUB 28680:IF K<=L THEN 28570
- 28480 IF T!>0 AND U!>0 AND T!<U! THEN W!=W!+T!/U! ELSE 28570
- 28520 IF R=0 AND INT(W!)<>W! THEN 28550
- 28530 IF W!>=WL! AND W!<=WH! THEN RETURN
- 28540 LOCATE 25,1:COLOR 23,0:PRINT"Too big or too small.";:GOTO 28590
- 28550 LOCATE 25,1:COLOR 23,0:PRINT"Whole number only.";:GOTO 28590
- 28560 LOCATE 25,1:COLOR 23,0:PRINT"Improper numeric entry.";:GOTO 28590
- 28570 LOCATE 25,1:COLOR 23,0:PRINT"Improper fraction entry.";:GOTO 28590
- 28580 LOCATE 25,1:COLOR 23,0:PRINT"First character cannot be a space.";
- 28590 COLOR 7,0:BEEP:OK=0:GOTO 28130
- 28640 IF MID$(W$,K,1)<"0" THEN RETURN
- 28650 IF MID$(W$,K,1)>"9" THEN RETURN
- 28660 K=K+1:IF K<=L THEN 28640 ELSE RETURN
- 28680 IF MID$(W$,K,1)<>" " THEN RETURN
- 28690 K=K+1:IF K<=L THEN 28680 ELSE RETURN
- 29040 LOCATE 22,1:PRINT SPACE$(80);:IF MID$(D$,12,1)=" " THEN 29180
- 29050 PRINT"Insert the correct PROGRAM diskette";:GOTO 29190
- 29140 LOCATE 22,1:PRINT SPACE$(80);:IF MID$(D$,12,1)=" " THEN 29180
- 29150 PRINT"Insert the correct DATA diskette";
- 29160 IF MID$(D$,12,1)<"A" THEN 29190
- 29170 PRINT " in drive ";MID$(D$,12,1);" and close the door.";:GOTO 29230
- 29180 PRINT"Make sure the correct diskette is";
- 29190 PRINT" in the system drive and close the door.";
- 29230 LOCATE 24,1:BEEP
- 29240 PRINT"Press ENTER or Esc to continue.";
- 29250 H=CSRLIN:G=POS(0)
- 29260 LOCATE H,G,1:GOSUB 29650
- 29270 IF ESC OR LEFT$(C$,1)=CHR$(13) THEN 29290
- 29280 GOSUB 29830:GOTO 29260
- 29290 H1=23:H2=24:G1=1:G2=80:GOSUB 29740:RETURN
- 29550 PRINT" (Y=Yes, N=No)? ";:H=CSRLIN:G=POS(0)
- 29560 LOCATE H,G,1:GOSUB 29650:LOCATE H,G:IF ESC THEN RETURN
- 29570 IF LEFT$(C$,1)="n" OR LEFT$(C$,1)="N" THEN PRINT"N";:YES=0:RETURN
- 29580 IF LEFT$(C$,1)="y" OR LEFT$(C$,1)="Y" THEN PRINT"Y";:YES=-1:RETURN
- 29590 GOSUB 29830:GOTO 29560
- 29650 MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$<>Z$ THEN 29650
- 29660 MID$(C$,1)=Z$:MID$(C$,1)=INKEY$:IF C$=Z$ THEN 29660
- 29670 ESC=0:IF LEFT$(C$,1)=CHR$(27) THEN ESC=-1
- 29680 LOCATE ,,0:IF OK THEN RETURN
- 29690 LOCATE 25,1:PRINT SPACE$(35);:OK=-1:RETURN
- 29730 H1=21:H2=24:G1=1:G2=80
- 29740 DEF SEG:AD=VARPTR(BS(1)):CALL AD(H1,G1,H2,G2):RETURN
- 29830 LOCATE 25,1:COLOR 23,0:PRINT"Wrong key pressed, try again.";
- 29840 COLOR 7,0:OK=0:BEEP:RETURN
- 29850 LOCATE 25,1:COLOR 23,0:PRINT"Can't move any farther.";
- 29860 COLOR 7,0:OK=0:BEEP:RETURN
- 29870 LOCATE 25,1:COLOR 23,0:PRINT"Data must be entered.";
- 29880 COLOR 7,0:OK=0:BEEP:RETURN
- 29910 LOCATE 25,1:COLOR 23,0:PRINT"Function not available.";
- 29920 COLOR 7,0:OK=0:BEEP:RETURN
- 29930 LOCATE 19,1,0:PRINT SPACE$(80);
- 29940 PRINT"PROGRAM ABORTED DUE TO A FATAL ERROR. F";
- 29950 PRINT"urther explanation of the following ";
- 29960 PRINT"error message may be found in Appendix A";
- 29970 PRINT" of the IBM or Compaq BASIC manual. ";
- 29980 PRINT SPACE$(239);:LOCATE 22,1,1:BEEP:ON ERROR GOTO 0
- 29990 END
-